/*
 * @Description: 
 * @Author: HKH
 * @Date: 2024-10-11 19:05:52
 * @LastEditors: HKH
 * @LastEditTime: 2024-10-11 19:06:13
 */
public class Producer extends Thread {
    // 成员属性
    private BaoZi baoZi;
    private String name;
  
    // 构造器
    public Producer() {
    }
  
    // 全参构造器
    public Producer(BaoZi baoZi, String name) {
      this.baoZi = baoZi;
      this.name = name;
    }
  
    // 重写run方法
    @Override
    public void run() {
      for (int i = 1; i <= 100; i++) {
        // 生产包子
        synchronized (baoZi) {
          // 需要同步的代码 - 开始
          // 判断包子是否存在
          if (baoZi.flag) {
            try {
              // 线程等待 此处的代码可能触发异常
              baoZi.wait();
            } catch (Exception e) {
              e.printStackTrace();
            }
          }
          // 生产包子
          System.out.println(this.name + "第" + i + "次，生产包子。");
          baoZi.num++;
          System.out.println("生产完成，生产包子数量：" + baoZi.num);
          // 此时有包子，flag改为true
          baoZi.flag = true;
          // 通知消费者吃包子
          baoZi.notify();
          // 需要同步的代码 - 结束
        }
      }
    }
  }